package com.gitee.wsl.time.chinese.bean.eightchar

import com.gitee.wsl.ext.base.length
import com.gitee.wsl.time.chinese.Lunar
import com.gitee.wsl.time.chinese.util.LunarUtil
import kotlin.collections.get

/**
 * 小运
 *
 * @author 6tail
 */
class XiaoYun(
    /**
     * 大运
     */
    private val daYun: DaYun,
    /**
     * 序数，0-9
     */
    val index: Int,
    /**
     * 是否顺推
     */
    private val forward: Boolean
) {
    /**
     * 年
     */
    val year: Int = daYun.startYear + index

    /**
     * 年龄
     */
    val age: Int = daYun.startAge + index

    private val lunar: Lunar = daYun.getLunar()

    val ganZhi: String
        /**
         * 获取干支
         *
         * @return 干支
         */
        get() {
            var offset: Int = LunarUtil.getJiaZiIndex(lunar.timeInGanZhi)
            var add = this.index + 1
            if (daYun.index > 0) {
                add += daYun.startAge - 1
            }
            offset += if (forward) add else -add
            val size: Int = LunarUtil.JIA_ZI.length
            while (offset < 0) {
                offset += size
            }
            offset %= size
            return LunarUtil.JIA_ZI[offset]
        }

    val xun: String
        /**
         * 获取所在旬
         * @return 旬
         */
        get() = LunarUtil.getXun(this.ganZhi)

    val xunKong: String
        /**
         * 获取旬空(空亡)
         * @return 旬空(空亡)
         */
        get() = LunarUtil.getXunKong(this.ganZhi)
}
